package ar.edu.unicen.pladema.vc1.fractal;

/**
 * Representación de número complejo. Solo cuenta con la funcionalidad
 * necesaria para el fractal de Mandelbrot.
 * @author Sebastian Perruolo
 *
 */
class ComplexNumber {
	private double realValue;
	private double imagValue;

	public ComplexNumber(double realPart, double imagPart) {
		this.realValue = realPart;
		this.imagValue = imagPart;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof ComplexNumber) {
			ComplexNumber otro = (ComplexNumber)obj;
			return ((realValue == otro.realValue) &&
					(imagValue == otro.imagValue));
		}
		return super.equals(obj);
	}


	/**
	 * Retorna una referencia a un NUEVO ComplexNumber sumando
	 * esta instancia con los pasados por parámetro.
	 *
	 */
	public ComplexNumber add(ComplexNumber theNum) {
		return new ComplexNumber(realValue + theNum.realValue,
				imagValue + theNum.imagValue);
	}	

	public double module() {
		return imagValue*imagValue+realValue*realValue;
	}

	public static ComplexNumber square(ComplexNumber zn) {
		return new ComplexNumber(
				(double)(zn.realValue*zn.realValue-zn.imagValue*zn.imagValue),
				(double)(2*zn.realValue*zn.imagValue)
			);
	}

}